gogrep: структурный поиск и замена Go кода

gogrep — это одна из моих любимых утилит для работы с Go. Она позволяет находить код по синтаксическим шаблонам, фильтровать результаты по типам выражений, а также выполнять замену (тоже по шаблону).

В этой заметке я расскажу как использовать gogrep, а также о VS Code расширении для более удобной работы с gogrep прямо из редактора.

Зачем нужен gogrep

Если в тезисах, то gogrep может быть полезен при:

  • Рефакторинге
  • Изучении кодовой базы
  • Поиске подозрительного кода (пример: ruleguard)

Рассмотрим пример, который демонстрирует изящность и эффективность структурного поиска.

Функции a() и b() выполняют одинаковые операции:

func a(xs []int) []int {   xs = append(xs, 1)   xs = append(xs, 2)   return xs }  func b(xs []int) []int {   xs = append(xs, 1, 2)   return xs }

Допустим, мы хотим переписать все места, где вызовы append можно схлопнуть.

Попробуем gogrep:

  • Находим все подходящие пары с помощью -x шаблона $x=append($x,$a); $x=append($x,$b)
  • Через -s шаблон $x=append(












Читать далее